home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / comm / tlxinstl.zip / GETKEY.ASM < prev    next >
Assembly Source File  |  1991-10-17  |  9KB  |  536 lines

  1. PAGE    58,    132
  2. TITLE    GETKEY
  3. SUBTTL GETKEY
  4.  
  5. EXTRN COL:word
  6. EXTRN COL_HOLD:word
  7. EXTRN ROW:byte
  8. EXTRN FIL_HND:word
  9. EXTRN inv_screen_attr:byte
  10. EXTRN screen_attr:byte
  11.  
  12. .model small
  13.  
  14. IF1
  15. INCLUDE     ASSEMBLY.MAC
  16. ENDIF
  17.  
  18. PAGE
  19. LSE_KEY SEGMENT PUBLIC 'CODE'
  20.  
  21. SUBTTL GETKEY
  22. GETKEY    PROC    FAR
  23.     ASSUME    CS:LSE_KEY
  24.     PUBLIC    GETKEY
  25. START_GET_KEY:
  26. ;------------------------------------------------------------------------------
  27.     PUSH    CX
  28.     CALC_ADDR ROW,COL      ;SET DI TO CURRENT LOCATION
  29.     CURSOR
  30.  
  31.     MOV    AH,0
  32.     INT    16H           ;GET CHARACTER FROM KEYBOARD
  33. WHAT_KEY:
  34.     CMP        AL,0    ;EXTENDED FUNCUTION KEY?
  35.     JNE        A1
  36.     CALL    EXKEY    ;call to extended key handler
  37.     JMP    EXIT
  38. A1:
  39.     CMP    AH,48H
  40.     JE    TEN_KEY
  41.     CMP    AH,4BH
  42.     JE    TEN_KEY
  43.     CMP    AH,4DH
  44.     JE    TEN_KEY
  45.     CMP    AH,50H
  46.     JE    TEN_KEY
  47.     JMP    SHORT A2
  48. TEN_KEY:
  49.     MOV    AH,0
  50. A2:
  51.     CMP    AL,08H    ;BACKSPACE?
  52.     JE    DEC_COL
  53.     JMP    ESC?
  54. DEC_COL:
  55.     PUSH    BX
  56.     DEC    COL
  57.     CURSOR
  58.     INC    COL
  59.     CMP    BH,inv_screen_attr   ;make sure that we stay in field
  60.     JNE    SKIP_BS
  61.     CMP    BL,'.'               ;IF DECIMAL DON'T DELETE
  62.     JE    EXIT_BS
  63.     CMP    COL,1
  64.     JLE    BS
  65.     DEC    COL
  66. BS:
  67.     CURSOR
  68.     MOV    BL,' '
  69.     MOV    ES:[DI],BX
  70.     MOV    ES:[DI-2],BX
  71.     JMP    SHORT EXIT_BS
  72. SKIP_BS:
  73.     CURSOR
  74.     MOV    BL,' '
  75.     MOV    ES:[DI],BX
  76. EXIT_BS:
  77.     POP    BX
  78.     JMP    EXIT
  79.  
  80. ESC?:    CMP    AL,1BH        ;ESC?
  81.     JNE    CR?
  82.     MOV    AH,27
  83.     JMP    EXIT
  84.  
  85. CR?:    CMP    AL,0DH        ;CR?
  86.     JNE    TAB_RIGHT
  87.     MOV    AH,13
  88.     JMP    EXIT
  89.  
  90. TAB_RIGHT:
  91.     CMP    AX,0F09H      ;TAB RIGHT?
  92.     JNE    SCB
  93. TR:
  94.     JMP    EXIT
  95.  
  96. SCB:    CMP    AX,4B34H  ;is it the shift cursor back key?
  97.     JNE    SCF      ;if not, try next
  98. ;    CMP    COL,2
  99. ;    JLE    STOP_DEC
  100. ;    CMP    BL,'.'               ;IF DECIMAL DON'T DELETE
  101. ;    JE    STOP_DEC
  102. ;    MOV    BL,' '
  103. ;    MOV    ES:[DI-2],BX
  104. ;    DEC    COL
  105. STOP_DEC:
  106. ;    JMP    PRINTABLE
  107.  
  108. SCF:    CMP    AX,4D36H  ;is it the shift cursor forward key?
  109. ;    JNE    SCU      ;if not, try next
  110. ;    CMP    COL,78
  111. ;    JGE    STOP_INC
  112. ;    MOV    BL,' '
  113. ;    MOV    ES:[DI+2],BX
  114. ;    INC    COL
  115. STOP_INC:
  116. ;    JMP    PRINTABLE
  117.  
  118. SCU:    CMP    AX,4838H  ;is it the shift cursor up key?
  119.     JNE    SCD      ;if not, try next
  120.     MOV    BL,' '
  121.     MOV    ES:[DI-160],BX
  122.     CMP    ROW,1
  123.     JLE    SKIP_SCU
  124.     DEC    ROW
  125. SKIP_SCU:
  126.     JMP    SHORT PRINTABLE
  127. ;
  128. SCD:    CMP    AX,5032H  ;is it the shift cursor down key?
  129.     JNE    CASE
  130.     MOV    BL,' '
  131.     MOV    ES:[DI+160],BX
  132.     CMP    ROW,23
  133.     JGE    PRINTABLE
  134.     INC    ROW
  135.     JMP    SHORT PRINTABLE
  136. CASE:
  137.     MOV    BL,AL
  138.     CMP    BL,' '
  139.     JB    EXIT
  140.     CMP    BL,'~'
  141.     JA    EXIT
  142.     CMP    BL,'a'
  143.     JB    UPPERCASE
  144.     CMP    BL,'z'
  145.     JA    UPPERCASE
  146.     AND    BL,5FH       ;mask out bit number 5, make lowercase upper case
  147. UPPERCASE:
  148.     MOV    ES:[DI],BX    ;Display character on screen
  149.     INC    COL
  150.     PUSH    BX
  151.     CURSOR
  152.     DEC    COL
  153.     CMP    BH,70H
  154.     POP    BX
  155.     MOV    AX,0
  156.     JNE    EXIT
  157.     INC    COL
  158. PRINTABLE:
  159.     MOV    AX,0
  160. EXIT:                   ;All done. clean up and return
  161.     CALC_ADDR ROW,COL      ;SET DI TO CURRENT LOCATION
  162.     POP    CX
  163. get_ret:
  164.     RET
  165. GETKEY    ENDP
  166.  
  167. ;************************** EXKEY ********************************************
  168. ;*****************************************************************************
  169. ;*****************************************************************************
  170. ;*****************************************************************************
  171.  
  172. EXKEY    PROC    NEAR
  173. START_EX_KEY:
  174.  
  175. CB:    CMP    AH,4BH    ;is it the cursor back key?
  176.     JNE    CF    ;if not, try next
  177.     CMP    COL,1
  178.     JLE    SKIP_POP
  179.     PUSH    BX
  180.     DEC    COL
  181.     CURSOR                 ;look for decimal point
  182.     INC    COL
  183.     CMP    BH,INV_SCREEN_ATTR    ;stay inside of inverted field
  184.     JNE    SKIP_CB
  185.     CMP    BL,'.'               ;decimal marks begining of field
  186.     JE    SKIP_CB
  187.     POP    BX
  188.     CURSOR                 ;look for decimal point
  189.     MOV    ES:[DI],BX
  190.     DEC    COL
  191.     JMP    EXIT_EX_KEY        ;JUMP TO EXKEY RETURN
  192. SKIP_CB:
  193.     CURSOR                 ;look for decimal point
  194.     POP    BX
  195. SKIP_POP:
  196.     JMP    EXIT_EX_KEY        ;JUMP TO EXKEY RETURN
  197.  
  198. CF:    CMP    AH,4DH    ;is it the cursor forward key?
  199.     JNE    CU    ;if not, try next
  200.     INC    COL
  201.     PUSH    BX
  202.     CURSOR
  203.     DEC    COL
  204.     CMP    BH,70H
  205.     POP    BX
  206.     JNE    SKIP_CF
  207.     CMP    COL,78
  208.     JGE    SKIP_CF
  209.     MOV    ES:[DI],BX
  210.     INC    COL
  211. SKIP_CF:
  212.     JMP    EXIT_EX_KEY
  213.  
  214. CU:    CMP    AH,48H    ;is it the cursor up key?
  215.     JNE    CDN    ;if not, try next
  216. ;    CMP    ROW,2
  217. ;    JLE    SKIP_CU
  218. ;    MOV    ES:[DI],BX
  219. ;    DEC    ROW
  220. ;SKIP_CU:
  221.     JMP    EXIT_EX_KEY
  222.  
  223. CDN:    CMP    AH,50H    ;is it the cursor down key?
  224.     JNE    TAB_LEFT
  225. ;    CMP    ROW,23
  226. ;    JGE    SKIP_CD
  227. ;    MOV    ES:[DI],BX
  228. ;    INC    ROW
  229. ;SKIP_CD:
  230.     JMP    EXIT_EX_KEY
  231.  
  232. TAB_LEFT:
  233.     CMP    AX,0F00H      ;TAB LEFT?
  234.     JNE    BREAK
  235. TL:
  236.     JMP    EXIT_EX_KEY
  237.  
  238. BREAK:    CMP    AH,0H    ;BREAK ?
  239.     JNE    GKEND
  240.     xor    ax,ax
  241.     mov    ah,3EH        ;close file
  242.     mov    bx,fil_hnd
  243.     int    21H
  244.     nop
  245.     MOV    AH,05
  246.     MOV    DL,13
  247.     INT    21H
  248.     MOV    AH,8
  249.     INT    21H
  250.     JMP    EXIT_EX_KEY
  251.  
  252. GKEND:    CMP    AH,4FH           ;END KEY?
  253.     JE    END_KEY
  254.     JMP    SHORT CE
  255. END_KEY:
  256. ;     MOV     COL,78
  257. ;BACKDENT:
  258. ;     CURSOR
  259. ;     CMP     BH,07
  260. ;     JNE     FIND_INV_CHAR
  261. ;     CMP     COL,1
  262. ;     JLE     END_LINE
  263. ;     DEC     COL
  264. ;     JMP     BACKDENT
  265. ;FIND_INV_CHAR:
  266. ;     CURSOR
  267. ;     CMP     BH,70H
  268. ;     JNE     END_COL
  269. ;     CMP     BL,' '
  270. ;     JNE     END_COL
  271. ;     DEC     COL
  272. ;     CMP     COL,1
  273. ;     JLE     END_LINE
  274. ;     JMP     FIND_INV_CHAR
  275. ;END_LINE:
  276. ;     MOV     COL,1
  277. ;END_COL:
  278. ;     INC     COL
  279.     JMP    EXIT_EX_KEY
  280. ;
  281. CE:    CMP    AH,75H
  282.     JNE    HOME
  283.     JMP    EXIT_EX_KEY
  284.  
  285. HOME:    CMP    AH,47H
  286.     JNE    CTH
  287.      ;     MOV     COL,1
  288. ;INDENT:
  289. ;     CURSOR
  290. ;     CMP     BH,07
  291. ;     JNE     INV_CHAR
  292. ;     CMP     COL,78
  293. ;     JGE     END_INDENT
  294. ;     INC     COL
  295. ;     JMP     INDENT
  296. ;INV_CHAR:
  297. ;     CURSOR
  298. ;     JMP     EXIT_EX_KEY
  299. ;END_INDENT:
  300. ;     MOV     COL,1
  301.     JMP    EXIT_EX_KEY
  302.  
  303. CTH:    CMP    AH,77H
  304.     JNE    INSERT
  305.      ;     MOV     ROW,2
  306.      ;     MOV     COL,19
  307.     JMP    EXIT_EX_KEY
  308.  
  309. INSERT: CMP    AH,52H
  310.     JNE    DEL
  311.     JMP    EXIT_EX_KEY
  312.  
  313. DEL:    CMP    AH,53H
  314.     JNE    PU
  315.     JMP    EXIT_EX_KEY
  316.  
  317. PU:    CMP    AH,49H
  318.     JNE    PD
  319.     JMP    EXIT_EX_KEY
  320.  
  321. PD:    CMP    AH,51H
  322.     JNE    F1X
  323.     JMP    EXIT_EX_KEY
  324. F1X:
  325.     CMP    AH,3BH    ;F1?
  326.     JNE    F2
  327.     MOV    ES:[DI],BX
  328.     JMP    EXIT_EX_KEY
  329.  
  330. F2:    CMP    AH,3CH    ;F2?
  331.     JNE    F3
  332.     MOV    ES:[DI],BX
  333.     JMP    EXIT_EX_KEY
  334.  
  335. F3:    CMP    AH,3DH    ;F3?
  336.     JNE    F4
  337.     MOV    ES:[DI],BX
  338.     JMP    EXIT_EX_KEY
  339.  
  340. F4:    CMP    AH,3EH    ;F4?
  341.     JNE    F5
  342.     MOV    ES:[DI],BX
  343.     JMP    EXIT_EX_KEY
  344.  
  345. F5:    CMP    AH,3FH    ;F5?
  346.     JNE    F6
  347.     MOV    ES:[DI],BX
  348.     JMP    EXIT_EX_KEY
  349.  
  350. F6:    CMP    AH,40H    ;F4?
  351.     JNE    F7
  352.     MOV    ES:[DI],BX
  353.     JMP    EXIT_EX_KEY
  354.  
  355. F7:    CMP    AH,41H    ;F7
  356.     JNE    F8
  357.     MOV    ES:[DI],BX
  358.     JMP    EXIT_EX_KEY
  359.  
  360. F8:    CMP    AH,42H    ;F8
  361.     JNE    F9
  362.     MOV    ES:[DI],BX
  363.     JMP    EXIT_EX_KEY
  364.  
  365. F9:    CMP    AH,43H    ;F9
  366.     JNE    F10
  367.     MOV    ES:[DI],BX
  368.     JMP    EXIT_EX_KEY
  369.  
  370. F10:    CMP    AH,44H    ;F10
  371.     JNE    AF1
  372.     MOV    ES:[DI],BX
  373.     JMP    EXIT_EX_KEY
  374.  
  375. AF1:    CMP    AH,68H    ;AF1?
  376.     JNE    AF2
  377.     MOV    ES:[DI],BX
  378.     JMP    EXIT_EX_KEY
  379.  
  380. AF2:    CMP    AH,69H    ;AF2?
  381.     JNE    AF3
  382.     MOV    ES:[DI],BX
  383.     JMP    EXIT_EX_KEY
  384.  
  385. AF3:    CMP    AH,6AH    ;AF3?
  386.     JNE    AF4
  387.     MOV    ES:[DI],BX
  388.     JMP    EXIT_EX_KEY
  389.  
  390. AF4:    CMP    AH,6BH    ;AF4?
  391.     JNE    AF5
  392.     MOV    ES:[DI],BX
  393.     JMP    EXIT_EX_KEY
  394.  
  395. AF5:    CMP    AH,6CH    ;AF5?
  396.     JNE    AF6
  397.     MOV    ES:[DI],BX
  398.     JMP    EXIT_EX_KEY
  399.  
  400. AF6:    CMP    AH,6DH    ;AF4?
  401.     JNE    AF7
  402.     MOV    ES:[DI],BX
  403.     JMP    EXIT_EX_KEY
  404.  
  405. AF7:    CMP    AH,6EH    ;AF7
  406.     JNE    AF8
  407.     MOV    ES:[DI],BX
  408.     JMP    EXIT_EX_KEY
  409.  
  410. AF8:    CMP    AH,6FH    ;AF8
  411.     JNE    AF9
  412.     MOV    ES:[DI],BX
  413.     JMP    EXIT_EX_KEY
  414.  
  415. AF9:    CMP    AH,70H    ;ALT F9?
  416.     JNE    AF10
  417.     MOV    ES:[DI],BX
  418.     JMP    EXIT_EX_KEY
  419.  
  420. AF10:    CMP    AH,71H    ;ALT F10?
  421.     JNE    CF1
  422.     MOV    ES:[DI],BX
  423.     JMP    EXIT_EX_KEY
  424.  
  425. CF1:    CMP    AH,5EH    ;CF1?
  426.     JNE    CF2
  427.     MOV    ES:[DI],BX
  428.     JMP    EXIT_EX_KEY
  429.  
  430. CF2:    CMP    AH,5FH    ;CF2?
  431.     JNE    CF3
  432.     MOV    ES:[DI],BX
  433.     JMP    EXIT_EX_KEY
  434.  
  435. CF3:    CMP    AH,60H    ;CF3?
  436.     JNE    CF4
  437.     MOV    ES:[DI],BX
  438.     JMP    EXIT_EX_KEY
  439.  
  440. CF4:    CMP    AH,61H    ;CF4?
  441.     JNE    CF5
  442.     MOV    ES:[DI],BX
  443.     JMP    EXIT_EX_KEY
  444.  
  445. CF5:    CMP    AH,62H    ;CF5?
  446.     JNE    CF6
  447.     MOV    ES:[DI],BX
  448.     JMP    EXIT_EX_KEY
  449.  
  450. CF6:    CMP    AH,63H    ;CF6?
  451.     JNE    CF7
  452.     MOV    ES:[DI],BX
  453.     JMP    EXIT_EX_KEY
  454.  
  455. CF7:    CMP    AH,64H    ;CF7
  456.     JNE    CF8
  457.     MOV    BL,198
  458.     MOV    ES:[DI],BX
  459.     JMP    EXIT_EX_KEY
  460.  
  461. CF8:    CMP    AH,65H    ;CF8
  462.     JNE    CF9
  463.     MOV    ES:[DI],BX
  464.     JMP    SHORT EXIT_EX_KEY
  465.  
  466. CF9:    CMP    AH,66H    ;ALT F9?
  467.     JNE    CF10
  468.     MOV    ES:[DI],BX
  469.     JMP    SHORT EXIT_EX_KEY
  470.  
  471. CF10:    CMP    AH,67H    ;ALT F10?
  472.     JNE    SF1
  473.     MOV    ES:[DI],BX
  474.     JMP    SHORT EXIT_EX_KEY
  475.  
  476.  
  477. SF1:    CMP    AH,54H    ;SF1?
  478.     JNE    SF2
  479.     MOV    ES:[DI],BX
  480.     JMP    SHORT EXIT_EX_KEY
  481.  
  482. SF2:    CMP    AH,55H    ;SF2?
  483.     JNE    SF3
  484.     MOV    ES:[DI],BX
  485.     JMP    SHORT EXIT_EX_KEY
  486.  
  487. SF3:    CMP    AH,56H    ;SF3?
  488.     JNE    SF4
  489.     MOV    ES:[DI],BX
  490.     JMP    SHORT EXIT_EX_KEY
  491.  
  492. SF4:    CMP    AH,57H    ;SF4?
  493.     JNE    SF5
  494.     MOV    ES:[DI],BX
  495.     JMP    SHORT EXIT_EX_KEY
  496.  
  497. SF5:    CMP    AH,58H    ;F5?
  498.     JNE    SF6
  499.     MOV    ES:[DI],BX
  500.     JMP    SHORT EXIT_EX_KEY
  501.  
  502. SF6:    CMP    AH,59H    ;SF6?
  503.     JNE    SF7
  504.     MOV    ES:[DI],BX
  505.     JMP    SHORT EXIT_EX_KEY
  506.  
  507. SF7:    CMP    AH,5AH    ;SF7
  508.     JNE    SF8
  509.     MOV    ES:[DI],BX
  510.     JMP    SHORT EXIT_EX_KEY
  511.  
  512. SF8:    CMP    AH,5BH    ;SF8
  513.     JNE    SF9
  514.     MOV    ES:[DI],BX
  515.     JMP    SHORT EXIT_EX_